/**
 * IdooAddRowTable 组件类型定义
 * @author AI Assistant
 * @description 可编辑表格组件的类型定义文件
 */

/**
 * 单元格组件类型枚举
 */
export enum CellType {
  /** 输入框 */
  INPUT = 'input',
  /** 数字输入框 */
  INPUT_NUMBER = 'input-number',
  /** 日期选择器 */
  DATE_PICKER = 'date-picker',
  /** 时间选择器 */
  TIME_PICKER = 'time-picker',
  /** 日期时间选择器 */
  DATETIME_PICKER = 'datetime-picker',
  /** 单选框 */
  RADIO = 'radio',
  /** 多选框 */
  CHECKBOX = 'checkbox',
  /** 下拉单选框 */
  SELECT = 'select',
  /** 下拉多选框 */
  SELECT_MULTIPLE = 'select-multiple',
  /** 开关 */
  SWITCH = 'switch',
  /** 文本展示 */
  TEXT = 'text'
}

/**
 * 选项接口（用于下拉框、单选框、多选框等）
 */
export interface Option {
  /** 选项的值 */
  value: string | number | boolean
  /** 选项的显示文本 */
  label: string
  /** 是否禁用 */
  disabled?: boolean
}

/**
 * 列配置接口
 */
export interface ColumnConfig {
  /** 列的唯一标识，对应数据中的字段名 */
  prop: string
  /** 列标题 */
  label: string
  /** 列宽度，不设置则自适应 */
  width?: number | string
  /** 最小列宽度 */
  minWidth?: number | string
  /** 单元格类型 */
  type: CellType
  /** 是否必填 */
  required?: boolean
  /** 占位符文本 */
  placeholder?: string
  /** 选项列表（用于下拉框、单选框、多选框） */
  options?: Option[]
  /** 是否可编辑，默认true */
  editable?: boolean
  /** 对齐方式 */
  align?: 'left' | 'center' | 'right'
  /** 是否固定列 */
  fixed?: boolean | 'left' | 'right'
  /** 格式化函数（用于展示） */
  formatter?: (row: any, column: any, cellValue: any, index: number) => string
  /** 自定义校验规则 */
  validator?: (value: any, row: any) => boolean | string
  /** 数字输入框的最小值 */
  min?: number
  /** 数字输入框的最大值 */
  max?: number
  /** 数字输入框的步长 */
  step?: number
  /** 日期/时间格式 */
  format?: string
  /** 日期/时间值格式 */
  valueFormat?: string
}

/**
 * 表格行数据接口
 */
export interface TableRow {
  /** 行的唯一标识 */
  _id?: string | number
  /** 是否正在编辑 */
  isEditing?: boolean
  /** 是否是新增行 */
  isNew?: boolean
  /** 是否是添加行按钮 */
  isAddRow?: boolean
  /** 原始数据备份 */
  originalData?: any
  /** 其他任意字段 */
  [key: string]: any
}

/**
 * 组件Props接口
 */
export interface IdooAddRowTableProps {
  /** 表格数据 */
  data: TableRow[]
  /** 列配置 */
  columns: ColumnConfig[]
  /** 是否显示操作列 */
  showOperation?: boolean
  /** 是否显示添加行按钮 */
  showAddRow?: boolean
  /** 是否显示多选框列 */
  showSelection?: boolean
  /** 表格高度 */
  height?: string | number
  /** 最大高度 */
  maxHeight?: string | number
  /** 是否显示边框 */
  border?: boolean
  /** 是否显示斑马纹 */
  stripe?: boolean
  /** 行的唯一键 */
  rowKey?: string
  /** 空数据时的提示文本 */
  emptyText?: string
  /** 是否在点击行时选中 */
  highlightCurrentRow?: boolean
}

/**
 * 组件Emits接口
 */
export interface IdooAddRowTableEmits {
  /** 获取所有数据 */
  (e: 'getAllData'): TableRow[]
  /** 获取新增的数据 */
  (e: 'getAddedData'): TableRow[]
  /** 获取删除的数据 */
  (e: 'getDeletedData'): TableRow[]
  /** 获取勾选的数据 */
  (e: 'getSelectedData'): TableRow[]
  /** 数据变化事件 */
  (e: 'dataChange', data: TableRow[]): void
  /** 行编辑事件 */
  (e: 'rowEdit', row: TableRow, index: number): void
  /** 行保存事件 */
  (e: 'rowSave', row: TableRow, index: number): void
  /** 行删除事件 */
  (e: 'rowDelete', row: TableRow, index: number): void
  /** 选择变化事件 */
  (e: 'selectionChange', selection: TableRow[]): void
}

/**
 * 组件暴露的方法接口
 */
export interface IdooAddRowTableExpose {
  /** 获取所有表格数据 */
  getAllData: () => TableRow[]
  /** 获取新增的数据 */
  getAddedData: () => TableRow[]
  /** 获取删除的数据 */
  getDeletedData: () => TableRow[]
  /** 获取勾选的数据 */
  getSelectedData: () => TableRow[]
  /** 添加新行 */
  addNewRow: () => void
  /** 清空选择 */
  clearSelection: () => void
  /** 验证表格数据 */
  validate: () => Promise<boolean>
}
